মেমোরি লিক (Memory Leak) হচ্ছে এমন একটি পরিস্থিতি, যেখানে প্রোগ্রাম ডাইনামিক মেমোরি বরাদ্দ করে, কিন্তু সেই মেমোরি পরবর্তীতে মুক্ত করা হয় না। এর ফলে, ব্যবহৃত মেমোরি কখনও সিস্টেমের কাছে ফেরত যায় না, যা শেষে সিস্টেমের মেমোরি কমে যেতে পারে এবং প্রোগ্রামটি স্লো হয়ে পড়তে পারে বা ক্র্যাশ করতে পারে। মেমোরি লিক সিস্টেমের জন্য একটি গুরুতর সমস্যা হতে পারে, বিশেষত দীর্ঘ সময় ধরে চলমান প্রোগ্রামের ক্ষেত্রে।
malloc()
, calloc()
, realloc()
দ্বারা বরাদ্দকৃত) মুক্ত না করা।NULL
করা না বা নতুন ডাটা অ্যাসাইন করা)।মেমোরি বরাদ্দের পরে সবসময় free()
ব্যবহার করুন:
malloc()
, calloc()
, বা realloc()
ফাংশন দ্বারা বরাদ্দকৃত মেমোরি মুক্ত করতে free()
ফাংশন ব্যবহার করতে হবে।free()
ফাংশনটি মেমোরি মুক্ত করার পরে, সেই পয়েন্টারটি NULL
করে দিন। এটি পরবর্তীতে অবৈধ অ্যাক্সেস থেকে রক্ষা করবে।উদাহরণ:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(10 * sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
// ডাইনামিক মেমোরি ব্যবহার করা
for (int i = 0; i < 10; i++) {
ptr[i] = i + 1;
}
// মেমোরি মুক্ত করা
free(ptr);
ptr = NULL; // মেমোরি মুক্ত করার পরে পয়েন্টারটি NULL করা
return 0;
}
পয়েন্টারকে NULL
করতে হবে:
free()
ফাংশন ব্যবহার করার পর, পয়েন্টারটি NULL
করে দিন, যাতে পরবর্তীতে সেই পয়েন্টারে অ্যাক্সেস না করা যায়। এটি dangling pointer সমস্যা প্রতিরোধ করবে।উদাহরণ:
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
ptr = NULL; // মেমোরি মুক্ত করার পরে পয়েন্টারকে NULL করা
free()
কল নিশ্চিত করুন:free()
কল করা উচিত।ভুল পয়েন্টার ব্যবহার এড়িয়ে চলুন:
উদাহরণ:
int *ptr = (int *)malloc(10 * sizeof(int));
// নতুন মেমোরি বরাদ্দ করার আগে পুরনো মেমোরি মুক্ত করা উচিত
free(ptr); // পুরনো মেমোরি মুক্ত করা
ptr = (int *)malloc(20 * sizeof(int)); // নতুন মেমোরি বরাদ্দ করা
মেমোরি লিক ডিটেকশন টুলস ব্যবহার করুন:
Valgrind উদাহরণ:
valgrind --leak-check=full ./your_program
এটি মেমোরি লিক সম্পর্কে বিস্তারিত প্রতিবেদন তৈরি করবে।
malloc()
, calloc()
, এবং realloc()
দ্বারা বরাদ্দকৃত মেমোরি সবসময় free()
ব্যবহার করে মুক্ত করতে হবে।NULL
করা ভালো অভ্যাস।common.read_more